# -*- coding: UTF-8 -*-
import re

from business.logger import Logger
from business.runtimeError import runtimeError

# 初始化日志
log = Logger("inputcheck.py").logger


# 默认设矩阵行数不超过50
def num_out_index(num):
    if num > 50 or num <= 0:
        log.error("输入矩阵行数有误，请输入（1~50）")
        raise runtimeError("输入矩阵行数有误，请输入（1~50）")


# 碎片化Text里矩阵元素字符串，将每个元素的值顺序装入一个列表中
def ele_check(matrix_str):
    is_error = re.search(r'[^0-9\.\,\t\s\n]', matrix_str)
    if is_error is not None:
        # print("输入数据非法")
        log.error("输入非法数据,请检查其是否带特殊符号!")
        raise runtimeError("输入非法数据,请检查其是否带特殊符号!")
    else:
        matrix_element = re.split(r'[^0-9\.]', matrix_str)
        # 把split分割后会产生空字符串数组，全部删除
        while '' in matrix_element:
            matrix_element.remove('')
    return matrix_element


# 检查输入的字符是否合法
def str_illegal(num, matrix_element=[]):
    if matrix_element.__len__() != num * num:
        log.error("输入元素个数与给定行数不一致，请检查元素数量或分割符号！")
        raise runtimeError("输入元素个数与给定行数不一致，请检查元素数量或分割符号！")
    if len(matrix_element) == 0:
        log.error("矩阵元素分割失败，请检查输入是否合法")
        raise runtimeError("矩阵元素分割失败，请检查输入是否合法")
    else:
        for s in matrix_element:
            is_error = re.search(r'\d\.\d|\d*', s)
            # melicent为每个矩阵的元素
            melicent = float(is_error.group())
            if is_error is None:
                # print(s + ":No find")
                # slag = False
                log.error(s + ":未找到")
                raise runtimeError(s + ":未找到")
            elif melicent > 1.0 or melicent < 0:
                # print(s + ":is illegal")
                # slag = False
                log.error(s + ":不符合隶属度定义（隶属度为0~1之间的小数）")
                raise runtimeError(s + ":不符合隶属度定义（隶属度为0~1之间的小数）")

# 主函数用于测试
# if __name__ == '__main__':
#     print('输入测试字符串:')
#     temp = input()
#     arg = ele_check(temp)
#     print(arg)
#     flag = str_illegal(arg)
#     print(flag)
